package com.face.console.tools;


import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.HashMap;
import java.util.Map;

/**
 * Description: 放置一些 常用的函数
 * Mybastis-plus 的分页封装可以放在这里用，
 *
 * map 的获取，当前登陆的用户信息 等等 (缺少jar)
 * <p>
 * Created by Andy_Lau on 2020/12/1 0:48
 */
public abstract  class  BaseControoler<T>
 {

     /**
      * 返回成功
      */
     protected R success()
     {
         return R.success();
     }

     /**
      * 返回失败消息
      */
     protected R error(Error error)
     {
         return R.error(error);
     }

     protected R error()
     {
         return R.error(Error.操作失败);
     }

     /**
      * 返回失败消息
      */
     protected R error(Error error, String msg)
     {
         return R.error(error, msg);
     }

     /**
      * 返回成功消息
      */
     protected R successMsg(String message)
     {
         return R.success(message);
     }

     /**
      * 返回成功消息
      */
     protected R success(Object data)
     {
         return R.success(data);
     }


     /**
      * 根据修改搜影响的行数返回结果
      */
     protected R result(boolean flag)
     {
         return flag == true ? success() : error(Error.操作失败);
     }

     protected R result(boolean flag, String msg)
     {
         return flag == true ? successMsg(msg) : error(Error.操作失败);
     }


     protected R result(int row)
     {
         return row > 0 ? success() : error(Error.操作失败);
     }

     protected R result(int row, String msg)
     {
         return row > 0 ? successMsg(msg) : error(Error.操作失败);
     }


//     /**
//      * 分页数据 默认使用更新时间降序
//      */
//     protected Page<T> page(OrderBy orderBy)
//     {
//         return getPage(orderBy);
//     }
//
//     protected Page<T> page(OrderBy orderBy, int current, int size)
//     {
//         Page<T> page = getPage(orderBy);
//         page.setSize(size);
//         page.setCurrent(current);
//         return page;
//     }

//     /**
//      * 自定义分页数据 默认使用更新时间降序
//      */
//     protected Page<T> page()
//     {
//         return getPage(new OrderBy(OrderBy.Direction.DESC, "update_time"));
//     }

//     /**
//      * <br>
//      * 自定义分页条件
//      */
//     private Page<T> getPage(OrderBy orderBy)
//     {
//         Integer size = ServletUtils.getParamInteger("size");
//
//         if (size != null && size == -1)
//         {
//             size = Integer.MAX_VALUE;
//         }
//
//         Integer pageNum = ServletUtils.getParamInteger("current");
//         Page<T> page = new Page<>(pageNum == null ? 0 : pageNum, size == null ? 15 : size);
//         if (orderBy.getDirection().isAscending())
//         {
//             page.setAsc(orderBy.getColumns());
//         }
//         else
//         {
//             page.setDesc(orderBy.getColumns());
//         }
//         return page;
//     }

//     /**
//      * <br>
//      * 设置查询参数
//      */
//     protected Wrapper<T> setParams(T t)
//     {
//         return new QueryWrapper<T>().lambda().setEntity(t);
//     }



     protected void out(String str, HttpServletResponse response)
     {
         ServletOutputStream outputStream = null;
         try
         {
             outputStream = response.getOutputStream();
             outputStream.write(str.getBytes());
             outputStream.flush();
         }
         catch (IOException e)
         {
             e.printStackTrace();
         }
         finally
         {
             try
             {
                 if (outputStream != null)
                 {
                     outputStream.close();
                 }
             }
             catch (IOException e)
             {
                 e.printStackTrace();
             }
         }
     }

     protected Map getMap()
     {
         return new HashMap(8);
     }

     protected Map getMap(Object key, Object val)
     {
         Map<Object, Object> map = new HashMap(8);
         map.put(key, val);
         return map;
     }

//     protected AppAuthTokenHandler tokenHandler(){
//         return BeanTool.getInstance(AppAuthTokenHandler.class);
//     }

//     protected User getCurrentUser(){
//         return tokenHandler().getUser();
//     }
//
//     protected Integer getCurrentUserId(){
//         return tokenHandler().getUserId();
//     }
}
